অ্যাপাচি কমন্স কালেকশনস (Apache Commons Collections) একটি শক্তিশালী লাইব্রেরি যা ডেটা স্ট্রাকচার ম্যানিপুলেশনকে সহজ এবং কার্যকরী করে তোলে। এতে Transformer এবং Closure এর মতো কাস্টম ফাংশনালিটি ব্যবহারের সুবিধা রয়েছে, যা ডেটা স্ট্রাকচারে অপারেশন করার জন্য অত্যন্ত উপকারী। Transformer ব্যবহার করে আপনি ডেটা স্ট্রাকচারের উপাদানগুলিকে রূপান্তর করতে পারেন, এবং Closure ব্যবহার করে আপনি একটি ফাংশন বা অপারেশন নির্দিষ্ট ডেটা উপাদানগুলির উপর কার্যকরী করতে পারেন।
এখানে আমরা Custom Transformer এবং Closure তৈরি করার পদ্ধতি বিস্তারিতভাবে আলোচনা করব।
1. Custom Transformer তৈরি করা
Transformer একটি Function এর মতো কাজ করে, যা ইনপুট ডেটা থেকে আউটপুট ডেটা তৈরি করে। এটি সাধারণত একটি অবজেক্টের উপর একটি নির্দিষ্ট পরিবর্তন বা রূপান্তর প্রক্রিয়া কার্যকর করার জন্য ব্যবহৃত হয়।
Custom Transformer কিভাবে কাজ করে?
- Transformer একটি ফাংশনাল ইন্টারফেস যা একটি ইনপুট অবজেক্ট গ্রহণ করে এবং একটি আউটপুট অবজেক্ট প্রদান করে।
- আপনি এটি কাস্টমাইজ করে নিজের প্রোজেক্টের জন্য নির্দিষ্ট রূপান্তর অপারেশন তৈরি করতে পারেন।
Custom Transformer তৈরি করার উদাহরণ:
ধরা যাক, আমাদের একটি List আছে, এবং আমরা চাই সমস্ত স্ট্রিংয়ের প্রথম অক্ষরকে বড় অক্ষরে রূপান্তর করতে।
import org.apache.commons.collections4.Transformer;
import org.apache.commons.collections4.ListUtils;
import java.util.Arrays;
import java.util.List;
public class CustomTransformerExample {
public static void main(String[] args) {
// Create a list of strings
List<String> list = Arrays.asList("apple", "banana", "orange");
// Create a custom transformer to convert first letter to uppercase
Transformer<String, String> transformer = new Transformer<String, String>() {
@Override
public String transform(String input) {
if (input == null || input.isEmpty()) {
return input;
}
// Capitalizing the first letter of the string
return input.substring(0, 1).toUpperCase() + input.substring(1);
}
};
// Apply the transformer to the list
List<String> transformedList = ListUtils.transformedList(list, transformer);
// Print the transformed list
System.out.println(transformedList); // Output: [Apple, Banana, Orange]
}
}
এখানে:
- Transformer ইন্টারফেসের মাধ্যমে একটি কাস্টম রূপান্তর তৈরি করা হয়েছে যা String এর প্রথম অক্ষরকে বড় অক্ষরে রূপান্তর করে।
- ListUtils.transformedList() পদ্ধতি ব্যবহার করে রূপান্তরটি তালিকায় প্রয়োগ করা হয়েছে।
2. Custom Closure তৈরি করা
Closure হল একটি Runnable এর মতো কাজ করে যা নির্দিষ্ট কাজ বা অপারেশন একটি ডেটা স্ট্রাকচারের উপাদানগুলির উপর সম্পাদন করে। Closure সাধারণত একটি এক্সপ্লিসিট রিটার্ন ভ্যালু ছাড়াই একটি অপারেশন সম্পন্ন করতে ব্যবহৃত হয়।
Custom Closure কিভাবে কাজ করে?
- Closure সাধারণত একটি এক্সিকিউটেবল ব্লক বা ফাংশন হিসেবে কাজ করে, যা নির্দিষ্ট অপারেশনগুলো সম্পাদন করে।
- এটি forEach বা apply এর মতো ফাংশনাল অপারেশনগুলির জন্য উপকারী।
Custom Closure তৈরি করার উদাহরণ:
ধরা যাক, আমাদের একটি List আছে, এবং আমরা প্রতিটি উপাদানের উপর একটি কাস্টম অপারেশন (যেমন স্ট্রিংয়ের শেষে একটি বিশেষ চিহ্ন যোগ করা) সম্পাদন করতে চাই।
import org.apache.commons.collections4.Closure;
import org.apache.commons.collections4.CollectionUtils;
import java.util.Arrays;
import java.util.List;
public class CustomClosureExample {
public static void main(String[] args) {
// Create a list of strings
List<String> list = Arrays.asList("apple", "banana", "orange");
// Create a custom closure to append a special character to each element
Closure<String> closure = new Closure<String>() {
@Override
public void execute(String input) {
// Append a special character to each string
System.out.println(input + "!");
}
};
// Apply the closure to the list
CollectionUtils.forEach(list, closure); // Output: apple! banana! orange!
}
}
এখানে:
- Closure ইন্টারফেসটি একটি অপারেশন হিসাবে তৈরি করা হয়েছে যা প্রতিটি স্ট্রিংয়ের শেষে
!চিহ্ন যোগ করবে। - CollectionUtils.forEach() পদ্ধতি ব্যবহার করে কাস্টম ক্লোজারটি তালিকার উপাদানগুলির উপর কার্যকরী করা হয়েছে।
3. Custom Transformer এবং Closure এর ব্যবহারকারী কেস
কেস ১: ডেটা ফিল্টারিং এবং রূপান্তর
ধরা যাক, আমাদের একটি তালিকা রয়েছে এবং আমরা এই তালিকার সব স্ট্রিংয়ের মধ্যে "apple" শব্দটি ফিল্টার করতে চাই, এবং তারপর বাকিগুলির প্রথম অক্ষর বড় করতে চাই।
import org.apache.commons.collections4.Transformer;
import org.apache.commons.collections4.Closure;
import org.apache.commons.collections4.ListUtils;
import org.apache.commons.collections4.CollectionUtils;
import java.util.Arrays;
import java.util.List;
public class DataFilterAndTransform {
public static void main(String[] args) {
// Create a list of strings
List<String> list = Arrays.asList("apple", "banana", "orange", "apple pie");
// Create a transformer to capitalize the first letter of each string
Transformer<String, String> transformer = new Transformer<String, String>() {
@Override
public String transform(String input) {
if (input == null || input.isEmpty()) {
return input;
}
return input.substring(0, 1).toUpperCase() + input.substring(1);
}
};
// Create a closure to filter out "apple" from the list
Closure<String> filterClosure = new Closure<String>() {
@Override
public void execute(String input) {
if (!input.contains("apple")) {
// Apply the transformer to the string and print it
String transformed = transformer.transform(input);
System.out.println(transformed);
}
}
};
// Apply the closure to filter and transform the list
CollectionUtils.forEach(list, filterClosure);
}
}
এখানে:
- প্রথমে apple শব্দগুলো ফিল্টার করা হয়েছে, এবং তারপর transformer দিয়ে বাকিগুলির প্রথম অক্ষর বড় করা হয়েছে।
- Closure এবং Transformer এর কম্বিনেশন ব্যবহার করে ডেটা ফিল্টারিং এবং ট্রান্সফরমেশন কার্যকর করা হয়েছে।
সারাংশ
Apache Commons Collections এ Transformer এবং Closure তৈরি করার মাধ্যমে আপনি ডেটা স্ট্রাকচারগুলির উপর কাস্টম অপারেশন বা রূপান্তর কার্যকর করতে পারেন। Transformer ইনপুট ডেটাকে আউটপুট ডেটায় রূপান্তর করে, এবং Closure নির্দিষ্ট কাজ বা অপারেশন ডেটার উপাদানগুলির উপর প্রয়োগ করে। এই দুটি শক্তিশালী ইউটিলিটি ক্লাস ব্যবহার করে আপনি জাভা প্রোগ্রামিংয়ে উন্নত ডেটা ম্যানিপুলেশন অপারেশন তৈরি করতে পারেন।
Read more